package org.microframework.cloud.auth.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.caffeine.CaffeineCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;

/**
 * 负载均衡缓存配置
 * 
 * 使用Caffeine缓存替代默认缓存实现，提高生产环境性能
 */
@Configuration
@EnableCaching
@Order(Ordered.HIGHEST_PRECEDENCE)  // 确保此配置最先被处理
public class LoadBalancerConfig {

    @Value("${spring.cache.caffeine.spec:maximumSize=500,expireAfterWrite=5s}")
    private String caffeineSpec;
    
    /**
     * 配置Caffeine缓存管理器
     * 
     * Spring Cloud LoadBalancer会自动检测到这个CacheManager，并使用它来缓存服务实例列表
     *
     * @return CacheManager
     */
    @Bean
    @Lazy(false)  // 强制非延迟加载
    @Order(Ordered.HIGHEST_PRECEDENCE)  // 确保此Bean最先被创建
    public CacheManager cacheManager() {
        CaffeineCacheManager cacheManager = new CaffeineCacheManager();
        // 直接使用配置文件中的spec字符串配置Caffeine
        cacheManager.setCacheSpecification(caffeineSpec);
        return cacheManager;
    }
} 